package cn.iocoder.yudao.module.social.service.content;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.social.controller.admin.content.vo.ContentCreateReqVO;
import cn.iocoder.yudao.module.social.controller.admin.content.vo.ContentPageReqVO;
import cn.iocoder.yudao.module.social.controller.admin.content.vo.ContentUpdateReqVO;
import cn.iocoder.yudao.module.social.dal.dataobject.content.ContentDO;

import jakarta.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 内容 Service 接口
 *
 * @author 芋道源码
 */
public interface ContentService {

    /**
     * 创建内容
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createContent(@Valid ContentCreateReqVO createReqVO);

    /**
     * 更新内容
     *
     * @param updateReqVO 更新信息
     */
    void updateContent(@Valid ContentUpdateReqVO updateReqVO);

    /**
     * 删除内容
     *
     * @param id 编号
     */
    void deleteContent(Long id);

    /**
     * 获得内容
     *
     * @param id 编号
     * @return 内容
     */
    ContentDO getContent(Long id);

    /**
     * 获得内容列表
     *
     * @param ids 编号
     * @return 内容列表
     */
    List<ContentDO> getContentList(Collection<Long> ids);

    /**
     * 获得内容分页
     *
     * @param pageReqVO 分页查询
     * @return 内容分页
     */
    PageResult<ContentDO> getContentPage(ContentPageReqVO pageReqVO);

    /**
     * 根据作者获得内容列表
     *
     * @param authorId 作者编号
     * @return 内容列表
     */
    List<ContentDO> getContentListByAuthor(Long authorId);

    /**
     * 根据容器获得内容列表
     *
     * @param containerId 容器编号
     * @return 内容列表
     */
    List<ContentDO> getContentListByContainer(Long containerId);

    /**
     * 校验内容列表
     *
     * @param ids 内容编号列表
     */
    void validateContentList(Collection<Long> ids);

    /**
     * 根据作者和星球获得内容列表
     *
     * @param authorId 作者编号
     * @param planetId 星球编号
     * @return 内容列表
     */
    List<ContentDO> getContentListByAuthorAndPlanet(Long authorId, Long planetId);

    /**
     * 根据容器和星球获得内容列表
     *
     * @param containerId 容器编号
     * @param planetId 星球编号
     * @return 内容列表
     */
    List<ContentDO> getContentListByContainerAndPlanet(Long containerId, Long planetId);

    /**
     * 根据星球获得内容分页
     *
     * @param pageReqVO 分页查询
     * @param planetId 星球编号
     * @return 内容分页
     */
    PageResult<ContentDO> getContentPageByPlanet(ContentPageReqVO pageReqVO, Long planetId);

}
